package com.ebupt.migu.music.strategy.service;

import com.ebupt.migu.music.common.entity.ResultObject;
import com.ebupt.migu.music.system.entity.SysUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

/**
 * Created by Intellij IDEA.
 * User:  liuyangyang@cd.ebupt.com
 * Date:  2019/9/24
 */
public interface StrategyService {

    /**
     * 创建策略
     *
     * @param params
     * @return
     */
    ResultObject addStrategy(Map<String, Object> params);

    /**
     * 查询策略列表
     * 查询条件： 策略名称、策略类型、创建时间、执行状态、创建人、部门
     *
     * @param params
     * @return
     */
    ResultObject strategyList(Map<String, Object> params, SysUser user);

    /**
     * 用策略名称或id查询策略列表
     * 查询条件： 策略名称、策略类型、创建时间、执行状态、创建人、部门
     *
     * @param params
     * @return
     */
    ResultObject strategyListByNameOrId(Map<String, Object> params, SysUser user);

    /**
     * 删除策略
     *
     * @param params
     * @return
     */
    ResultObject deleteStrategy(Map<String, Object> params);

    /**
     * 更新策略详情
     *
     * @param params
     * @return
     */
    ResultObject updateStrategy(Map<String, Object> params);

    /**
     * 中止/终止策略执行
     *
     * @param params
     * @return
     */
    ResultObject endExecute(Map<String, Object> params);

    /**
     * 重新提交运营策略
     *
     * @param params
     * @return
     */
    ResultObject resubmit(Map<String, Object> params);

    /**
     * 查询策略详情
     * i 策略审批查看策略详情
     * ii 查看策略关联的人群的详情
     *
     * @param params
     * @return
     */
    ResultObject detail(Map<String, Object> params);

    /**
     * 手动输入短信接受人，测试短信发送
     *
     * @param params
     * @return
     */
    ResultObject sendMsgForTest(Map<String, Object> params);

    /**
     * 通过策略名称查询策略详情
     *
     * @param params
     * @return
     */
    ResultObject queryStrategyDetailByName(Map<String, Object> params);

    /**
     * 暂停策略执行
     *
     * @param params
     * @return
     */
    ResultObject pause(Map<String, Object> params);

    /**
     * 兑换码上传
     *
     * @param params
     * @param groupId
     * @return
     */
    ResultObject pull(MultipartFile file, String groupId);

    /**
     * Revocation result object.
     *
     * @param params the params
     * @return the result object
     */
    ResultObject<String> revocation(Map<String, Object> params);

    /**
     * 将审批发送到大营销平台，测试用
     *
     * @param params
     * @throws IOException
     */
    boolean sendToMegamarketAudit(Map<String, Object> params) throws IOException;
}
